//
// .flatten() 用于处理迭代器中的 Result 项，它会自动展开 Ok 中的值并忽略 Err。
// 我们可以通过一个具体的例子来演示它的行为，包括哪些错误会被忽略，并通过 println! 打印观察。
//
use std::fs;

fn main() {
    // 模拟一个包含成功和失败的目录项
    let dir_entries = vec![
        Ok("file1.txt"),       // 模拟有效的 DirEntry
        Err(std::io::Error::new(std::io::ErrorKind::PermissionDenied, "No permission")), // 模拟错误
        Ok("file2.txt"),       // 另一个有效的 DirEntry
        Err(std::io::Error::new(std::io::ErrorKind::NotFound, "File not found")),        // 另一个错误
    ];

    println!("原始条目（包含错误）:");
    for entry in &dir_entries {
        match entry {
            Ok(name) => println!("  Ok: {}", name),
            Err(e) => println!("  Err: {}", e),
        }
    }

    println!("\n使用 flatten() 后的结果:");
    for entry in dir_entries.into_iter().flatten() {
        println!("  {}", entry); // 只有 Ok 的值会到达这里
    }
}